Skip to main content

使用 MC_DigitalCamSwitch_HighPrecision

这个例子 BasicMotion_DigitalCamSwitch_HighPrecision.project 位于安装目录中 CODESYS 下面 ..\CODESYS SoftMotion\Examples

此示例说明如何使用的输出 SMC_DigitalCamSwitch_HighPrecision 以高时间分辨率控制数字输出。以 Beckhoff 的 EL2258 和 EL2252 终端为例。

注意

示例中未包含 Beckhoff 的设备描述。您可以直接从供应商处下载这些文件并将其安装到设备存储库中。要运行该示例,你需要一个 EK1100 总线耦合器、一个 EL2258 终端和一个 EL2252 终端

重要

此示例是根据 EL2258 的 0017 修订版和 EL2252 的 0020 修订版开发和测试的。它仅作为一个例子。我们不保证正确性。源代码在使用前必须经过测试。如有必要,必须将其修改为终端的其他版本。

应用程序的结构

该应用程序包含一个 Main 程序, DigitalCamSwitch_EL2258DigitalCamSwitch_EL2252 功能块,以及带有 EL2258 和 EL2252 输出端子的 EK1100 总线耦合器。

这个 DigitalCamSwitch_EL2258DigitalCamSwitch_EL2252 功能块是示例的重要部分。他们展示了如何使用 Events 的输出 SMC_DigitalCamSwitch_HighPrecision 对数字输出进行编程。应将功能块理解为可以适应其他硬件的示例。

DigitalCamSwitch_EL2258

. 该功能块的工作原理如下:
  1. 该功能块在上升沿处初始化 Enable 输入。 STATE_INIT_0STATE_INIT_1 各州, OutputBufferReset 写入 EL2258 终端的信号然后 aLastEventIds 数组已初始化。每个轨道上次处理的事件的 ID 保存在此数组中。这样可以防止事件多次传输到终端。

  2. 初始化后 (STATE_ACTIVE),所有曲目依次处理,并对每条轨道执行以下逻辑:

    1. 检查 EL2258 终端是否已经接受了最后的命令事件 (ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter)。

    2. 循环浏览赛道的所有事件。只有那些事件是 ToggleEventId 大于上次处理的 ID,将进一步考虑。(查询 EventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))

      参见 “活动顺序注意事项” 部分。

    3. 转换 Duration 将事件写入 EtherCAT 时间戳并相应地写入 ChannelsOut[channel].OutputEventStateChannelsOut[channel].OutputEventTime 输出。

    4. 在最多 5 个事件后中止处理。

    5. 如果发现至少一个事件,则通知终端存在新事件 (ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1)。

关于活动顺序的备注

事件由返回 SMC_DigitalCamSwitch_HighPrecision 数组中每条轨道的功能块。这个 SwitchNumber 还有一个 ToggleEventId 将针对每个事件返回。这个 ToggleEventId 是独一无二的,每首曲目都是上升的。

有关更多信息,请参阅: SMC_CAMSWITCH 切换事件

在示例中, aLastEventIds[trackNo] 数组存储每首曲目 ToggleEventId 最后一次传输到终端是在之前的函数块调用中。因为 ToggleEventIds 按升序排列,下次调用将确切知道哪些事件仍需要传输。

. 仍有两个细节需要考虑:
  1. 因为不知道在哪里 ToggleEventId 活动开始了, valid 标志保存在中 EventId ID 之外的数据类型。对于 EventId_GreaterThan 对比,这个 valid 相应地考虑了标志。

  2. 这个 ToggleEventIds 有 32 位数据类型 UDINT 因此,原则上可能会因运行时间长或开关频率高而溢出。然后,该值从 2^32-1 变回 0。比较函数 EventId_GreaterThan 还考虑了 32 位溢出。

PDO 映射 EL2258

这个 ChannelsOutChannelsIn 的输出 DigitalCamSwitch_EL2258 功能块连接到 EL2258 终端的相应输入/输出通道。下图显示了频道 1 的映射。频道 2 类似;仅在访问时才有 ChannelsOutChannelsIn 索引是 2,而不是 1。

_sm_img_mapping_el2258.png

DigitalCamSwitch_EL2252

基本原理等同于 DigitalCamSwitch_EL2258。区别在于信号的写入方式,因为 EL2252 终端只能对一个活动事件进行编程。

  1. 首先,函数块在中初始化 STATE_INIT

  2. 然后 STATE_CHECK_FOR_EVENT 检查事件是否来自 SMC_DigitalCamSwitch_HighPrecision 功能块处于待处理状态。

  3. 如果事件可用,则必须在两个周期内对该事件进行编程:

    • 输出和 EtherCAT 时间戳是在第一个周期中写入的。这个 Activate 输出设置为 0。

    • 在第二个周期中, Activate 输出设置为 3 英寸 STATE_ACTIVATE_EVENT_IN_EL2252。这将在终端中激活该事件

  4. STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTS,然后系统会等到事件被执行。来自的信号 Feedback 终端的输入用于此目的。

PDO 映射 EL2252

_sm_img_mapping_el2252.png

Main

在主程序中,配置了四台交换机(每条轨道上两台)。这些曲目也有不同的开/关补偿OnCompOffComp):

_sm_img_digitalcamswitch_highprecision.png

该程序包括必要的功能块调用,用于激活轴的预测并以 180°/s (*) 的速度持续移动,以及 SMC_DigitalCamSwitch_HighPrecisionDigitalCamSwitch_EL2258,以及 DigitalCamSwitch_EL2252。在开始运动之前,现场总线必须完全通电。否则无法将事件传输到终端。

(*) 选择持续运动是为了使示例简单明了。但是, SMC_DigitalCamSwitch_HighPrecision 功能块适用于所有类型的动作。例如,它还提供加速阶段或凸轮期间的精确时间戳

调试

  1. 生成应用程序并将其下载到控制器。

  2. 启动应用程序。